package com.fhzn.boss.web.converter;


import com.fhzn.boss.entity.User;
import com.fhzn.boss.tools.AESEncryptorUtils;
import com.fhzn.boss.tools.DateTimeUtils;
import com.fhzn.boss.web.vo.UserExportVO;
import com.fhzn.boss.web.vo.UserVO;
import com.google.common.collect.Lists;
import org.apache.commons.collections.CollectionUtils;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @author 老顾
 * @apiNote
 * @since 2023/12/27
 */
public interface UserConverter {

    /**
     * 用户实体转换
     *
     * @param user 请求参数
     * @return 返回参数
     */
    static UserVO fromUser(User user) {
        UserVO userVO = new UserVO();
        if (user != null) {
            userVO.setId(user.getId());
            userVO.setNickname(user.getNickname());
            userVO.setNicknameCn(user.getNicknameCn());
            userVO.setStatus(user.getStatus());
            userVO.setMobile(user.getMobile());
            userVO.setTel(user.getTel());
            userVO.setAppCode(user.getAppCode());
            userVO.setTimesegments(user.getTimeSegments());
            userVO.setPassword(AESEncryptorUtils.decrypt(user.getPassword()));
            userVO.setPasswordExpired(user.getPasswordExpired());
            userVO.setIdno(user.getIdno());
            userVO.setSex(user.getSex());
            userVO.setEmail(user.getEmail());
            userVO.setCreatedTime(DateTimeUtils.format(user.getCreatedTime()));
            userVO.setAppCode(user.getAppCode());
        }
        return userVO;
    }

    /**
     * 用户实体转换
     *
     * @param user 请求参数
     * @return 返回参数
     */
    static UserExportVO fromExportUser(User user) {
        UserExportVO vo = new UserExportVO();
        if (user != null) {
            vo.setNickname(user.getNickname());
            vo.setNicknameCn(user.getNicknameCn());
            vo.setStatus(user.getStatus());
            vo.setPassword(AESEncryptorUtils.decrypt(user.getPassword()));
            vo.setMobile(user.getMobile());
            vo.setEmail(user.getEmail());
            vo.setAppCode(user.getAppCode());
        }
        return vo;
    }

    /**
     * 用户实体转换
     *
     * @param users 请求参数
     * @return 返回参数
     */
    static List<UserExportVO> fromUserList(List<User> users) {
        if (CollectionUtils.isEmpty(users)) {
            return Lists.newArrayList();
        }
        return users.stream().map(UserConverter::fromExportUser).collect(Collectors.toList());
    }
}
